package cn.hl.hm.handler;

import java.util.Map;

import cn.hl.hm.constants.PayMethod;

/**
 * 支付处理类，每个支付方式对应一个Handler，需要在initHandler()调用register方法进行注册
 * 
 * @author 大和
 *
 */
public abstract class PayHandler implements Callback {

	public PayHandler() {
		initHandler();
	}

	/**
	 * @param orderId
	 * @param orderInfo 待签名字符串 （支付宝时候必填 其他没有）
	 * @param iosFlag 1正式 2企业
	 * @return
	 */
	public abstract Map<String, String> handler(Map<String, String> map);

	/**
	 * 子类需要调用此方法注册，不可以盖此方法，一种支付方式可以注册成同一个handler
	 * 
	 * @param payMethod
	 * @param clazz
	 */
	protected final void register(PayMethod payMethod, Class<? extends PayHandler> clazz) {
		PayExecuteFactory.register(payMethod, clazz);
	}

	/**
	 * 需要子类实现此方法，初始注册支付方式及处理Handler,到PayHandlerFactory中
	 * 
	 * @see PayHandler.register(PayMethod payMethod, Class<? extends PayHandler>
	 *      clazz);
	 * 
	 */
	protected abstract void initHandler();

}
